﻿#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>

typedef int BTDatatype;
typedef struct BinarytreeNode
{
	BTDatatype data;
	struct BinarytreeNode* Left;
	struct BinarytreeNode* Right;
}BTNode;

BTNode* BuyNewNode(BTDatatype x);

void PreOrder(BTNode* root);
void InOrder(BTNode* root);
void PostOrder(BTNode* root);

// ⼆叉树结点个数
int BinaryTreeSize(BTNode* root);
// ⼆叉树叶⼦结点个数
int BinaryTreeLeafSize(BTNode* root);
// ⼆叉树第k层结点个数
int BinaryTreeLevelKSize(BTNode* root, int k);
//⼆叉树的深度/⾼度
int BinaryTreeDepth(BTNode* root);
// ⼆叉树查找值为x的结点
BTNode* BinaryTreeFind(BTNode* root, BTDatatype x);
// ⼆叉树销毁
void BinaryTreeDestory(BTNode** root);

void LevelOrderr(BTNode* root);

bool BinaryTreeComplete(BTNode* root);